//package cn.fastloader.web.controller;
//
//
//import cn.fastloader.config.MinioUtil;
//import cn.fastloader.config.SysUploadService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.http.MediaType;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletResponse;
//import java.time.LocalDate;
//import java.time.format.DateTimeFormatter;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.concurrent.locks.ReentrantLock;
//
///**
// * (SysUpload)控制器
// *
// * @author todoitbo
// * @since 2023-05-21 15:26:08
// */
//@Slf4j
//@RestController
//@RequestMapping(value = "sysUpload")
//public class SysUploadController {
//
//    @Resource
//    protected SysUploadService service;
//
//    /**
//     * description: get方法初校验
//     *
//     * @author bo
//     * @date 2023/5/21 19:18
//     */
//    @GetMapping("/upload")
//    public BoResult upload(SysUpload param) {
//        String identifier = param.getIdentifier();
//        Integer totalChunks = param.getTotalChunks();
//        Integer chunkNumber = param.getChunkNumber();
//        Map<String, Object> data = new HashMap<>(1);
//        Boolean exists = JedisUtil.exists(identifier);
//        // 判断redis中是否还有此文件MD5
//        if (exists){
//            Map<String,Object> map = new HashMap<>(2);
//            int identifiers = Integer.parseInt(JedisUtil.getJson(identifier));
//            int[] uploadedChunks = new int[identifiers];
//            for (int i = 1; i <= identifiers; i++) {
//                uploadedChunks[i-1]=i;
//            }
//            map.put("uploadedChunks",uploadedChunks);
//            return BoResult.resultOk(map);
//        }else {
//            // 判断是否是多片，如果是多片则创建临时桶
//            if (totalChunks>1){
//                service.createTempBucket(param.getIdentifier());
//            }
//        }
//        return BoResult.resultOk("ok");
//
//    }
//
//    /**
//     * description: post方法实现真正的上传逻辑
//     *
//     * @author bo
//     * @date 2023/5/21 19:18
//     */
//    @PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
//    public BoResult uploadAll(SysUpload param, HttpServletResponse response) {
//        //判断文件是否是多片
//        Integer totalChunks = param.getTotalChunks();
//        String identifier = param.getIdentifier();
//        LocalDate localDate = LocalDate.now();
//        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd/");
//        String format = localDate.format(dateTimeFormatter);
//        // 设置文件名路径
//        String fileName = "public/"+format+param.getFile().getOriginalFilename();
//        Boolean exists = JedisUtil.exists(identifier);
//        Jedis jedis = JedisUtil.getJedis();
//        // 如果非多片，直接上传
//        if (totalChunks==1){
//            return BoResult.resultOk(MinioUtil.upload("xiaobo", param.getFile(), fileName));
//        }
//        boolean register = service.createTempBucket(param.getIdentifier());
//        MinioUtil.upload(param.getIdentifier(), param.getFile(), String.valueOf(param.getChunkNumber()));
//        // 如果上传临时桶成功，redis+1
//        if (register){
//            try {
//                assert jedis != null;
//                jedis.incr(identifier);
//            }catch (Exception e){
//                throw new BusinessException("redis递增桶的片出错！",e.getMessage()).setCause(e);
//            }
//            // 如果redis中分片大小等于桶的总分片大小，则合并分片
//            if (JedisUtil.getJson(identifier).equals(String.valueOf(totalChunks))) {
//                return BoResult.resultOk(service.mergeTempBucket(param.getIdentifier(), fileName));
//            }
//        }
//        return BoResult.resultOk(BaseBoConstants.TRUE);
//    }
//
//}
//
